package com.alm.token.api;


import com.alm.token.ui.data.bean.AddAppendOrderData;
import com.alm.token.ui.data.bean.AddDrawData;
import com.alm.token.ui.data.bean.AddRedBagData;
import com.alm.token.ui.data.bean.AddUpCloseVipData;
import com.alm.token.ui.data.bean.ChannelTypeData;
import com.alm.token.ui.data.bean.CorwdAddData;
import com.alm.token.ui.data.bean.CorwdIndexData;
import com.alm.token.ui.data.bean.CurrencyChangeData;
import com.alm.token.ui.data.bean.CurrencyChangeIndexData;
import com.alm.token.ui.data.bean.CurrencyChangeListData;
import com.alm.token.ui.data.bean.CurrentOrderData;
import com.alm.token.ui.data.bean.DrawIndexData;
import com.alm.token.ui.data.bean.DrawListData;
import com.alm.token.ui.data.bean.FindMoreData;
import com.alm.token.ui.data.bean.GetRedBagsDat;
import com.alm.token.ui.data.bean.LeHuoBaoListData;
import com.alm.token.ui.data.bean.LoginData;
import com.alm.token.ui.data.bean.MessageData;
import com.alm.token.ui.data.bean.OutPutRedBagData;
import com.alm.token.ui.data.bean.RedRobDetailData;
import com.alm.token.ui.data.bean.RegisterData;
import com.alm.token.ui.data.bean.ShowUserXingjiData;
import com.alm.token.ui.data.bean.SuperColorEggData;
import com.alm.token.ui.data.bean.UpdateData;
import com.alm.token.ui.data.bean.UserData;
import com.alm.token.ui.data.bean.UserListLHData;
import com.alm.token.ui.data.bean.UserPayAdressData;
import com.alm.token.ui.data.bean.UserWalletData;
import com.alm.token.ui.data.bean.VipOrderListData;
import com.alm.token.ui.data.bean.ZhuijiashowData;

import retrofit2.http.Field;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import rx.Observable;

/**
 * Created by PDD on 2017/12/22.
 */

public interface ApiService {

    /**
     * 此接口用于从网络获取数据的接口，使用retrofit框架
     */

    /**
     * 登录获取token
     *
     * @param username
     * @param pwd
     * @return
     */
    @FormUrlEncoded
    @POST("/app/API/login")
    Observable<LoginData> getLoginData(@Field("username") String username, @Field("pwd") String pwd);

    /**
     * 获取短信验证码
     *
     * @param mobile
     * @return
     */
    @FormUrlEncoded
    @POST("/api/sms/yunpianSendSmsCode")
    Observable<RegisterData> getSmsCodeData(@Field("mobile") String mobile);

    /**
     * 注册
     *
     * @param phone
     * @param pwd
     * @param message
     * @param username
     * @param code
     * @return
     */
    @FormUrlEncoded
    @POST("/app/API/register")
    Observable<RegisterData> getRegisterData(@Field("phone") String phone, @Field("pwd") String pwd,
                                             @Field("message") String message, @Field("username") String username,
                                             @Field("code") String code);

    /**
     * 重置密码
     *
     * @param phone
     * @param pwd
     * @param message
     * @param username
     * @return
     */
    @FormUrlEncoded
    @POST("/app/API/modfixMyPwd")
    Observable<RegisterData> getmodfixMyPwdData(@Field("phone") String phone, @Field("pwd") String pwd,
                                                @Field("smscode") String message, @Field("username") String username);

    /**
     * 获取首页钱包数据
     *
     * @return
     */
    @POST("/api/user/index")
    Observable<UserWalletData> getUserWalletData();

    /**
     * 获取公告/平台消息
     *
     * @param msgType
     * @return
     */
    @FormUrlEncoded
    @POST("/api/user/msg")
    Observable<MessageData> getMessageData(@Field("msgType") String msgType);

    /**
     * 获取超级彩蛋_数据
     *
     * @return
     */
    @POST("/api/egg/index")
    Observable<SuperColorEggData> getSuperColorEggData();

    /**
     * 获取当期vip订单信息
     *
     * @return
     */
    @POST("/api/vip/order")
    Observable<CurrentOrderData> getCurrentOrderData();

    /**
     * 申请/升级Vip
     *
     * @param type
     * @return
     */
    @FormUrlEncoded
    @POST("/api/vip/add")
    Observable<AddUpCloseVipData> getAddUpVipData(@Field("type") String type);

    /**
     * 解除VIP
     *
     * @param
     * @return
     */
    @POST("/api/vip/stopVip")
    Observable<AddUpCloseVipData> getStopVipData();

    /**
     * vip订单历史
     *
     * @param limit 条数 100
     * @param page  页数  1
     * @return
     */
    @FormUrlEncoded
    @POST("/api/vip/orderList")
    Observable<VipOrderListData> getVipOrderListData(@Field("limit") String limit,
                                                     @Field("page") String page);

    /**
     * 乐活宝 记录
     *
     * @param orderId     量化订单id
     * @param limit       条数 100
     * @param page        页数  1
     * @param channelType 收益类型，全部传null值
     * @param moneyType   金额类型
     * @param incomeType  收入支出类型
     * @return
     */
    @FormUrlEncoded
    @POST("/api/wallet/log")
    Observable<LeHuoBaoListData> getLeHuoBaoListData(@Field("orderId") String orderId,
                                                     @Field("limit") String limit,
                                                     @Field("page") String page,
                                                     @Field("channelType") String channelType,
                                                     @Field("moneyType") String moneyType,
                                                     @Field("incomeType") String incomeType);

    /**
     * 乐活宝 收益类型
     *
     * @param
     * @return
     */
    @POST("/api/wallet/getChannelType")
    Observable<ChannelTypeData> getChannelTypeData();

    /**
     * 乐活宝 充值
     *
     * @param money 金额 double
     * @return
     */
    @FormUrlEncoded
    @POST("/api/wallet/topUps")
    Observable<RegisterData> getLeHuoTopUpsData(@Field("money") String money);


    /**
     * 参与众筹
     *
     * @param moneyType wallets 中的id
     * @param price     数量
     * @return
     */
    @FormUrlEncoded
    @POST("/api/crowd/add")
    Observable<CorwdAddData> getCorwdAddData(@Field("moneyType") String moneyType,
                                             @Field("price") String price);

    /**
     * 众筹首页
     *
     * @return
     */
    @POST("/api/crowd/index")
    Observable<CorwdIndexData> getCorwdIndexData();


    /**
     * 红包 领取红包
     *
     * @param redId 红包的id
     * @return
     */
    @FormUrlEncoded
    @POST("/api/redPacket/rob")
    Observable<GetRedBagsDat> getRedRobData(@Field("redId") String redId);

    /**
     * 红包 发送红包记录
     *
     * @param
     * @return
     */
    @POST("/api/redPacket/output")
    Observable<OutPutRedBagData> getOutPutRedBagData();

    /**
     * 红包 领取红包记录
     *
     * @param
     * @return
     */
    @POST("/api/redPacket/input")
    Observable<OutPutRedBagData> getInPutRedBagData();

    /**
     * 红包 添加红包
     *
     * @param moneyTotal 金额
     * @param num        红包数量
     * @param type       类型 1 固定金额 2 随机红包
     * @param msg        祝福语
     * @param payPwd     支付密码
     * @return
     */
    @FormUrlEncoded
    @POST("/api/redPacket/add")
    Observable<AddRedBagData> getAddRedBagData(@Field("moneyTotal") String moneyTotal,
                                               @Field("num") String num,
                                               @Field("type") String type,
                                               @Field("msg") String msg,
                                               @Field("payPwd") String payPwd);

    /**
     * 红包 红包详情
     *
     * @param redId 红包的id
     * @return
     */
    @FormUrlEncoded
    @POST("/api/redPacket/packetDetail")
    Observable<RedRobDetailData> getRedRobDetailData(@Field("redId") String redId);


    //    请求参数：
//    limit : （可选）获取的条数限制，取值（1-200），默认 20
//    id : （可选）从第几条快讯ID进行查询，默认 0
//    flag : （可选）结合id，是向上（大于）查询还是向下（小于）查询，取值up、down，默认down
//    默认值 : id=0&flag=down，获取最新的 {limit} 条快讯记录
//    使用 : id=100&flag=down, 获取小于id 100 的 {limit} 条快讯记录，适用于获取历史快讯
//    使用 : id=200&flag=up, 获取大于id 200 的 {limit} 条快讯记录，适用于获取最新快讯（注意，
//    依然会返回小于id为200的数据）
    @GET("/live/list")
    Observable<FindMoreData> getFindMoreData(@Query("id") String id,
                                             @Query("flag") String flag,
                                             @Query("limit") String limit);

    /**
     * 区块链钱包充值地址
     *
     * @return
     */

    @POST("/app/API/getUserPayAdress")
    Observable<UserPayAdressData> getUserPayAdress();

    /**
     * 提现
     *
     * @param money     金额
     * @param token     token
     * @param msg       备注
     * @param moneyType 1 ETH 2 G12
     * @return
     */
    @FormUrlEncoded
    @POST("/api/draw/add")
    Observable<AddDrawData> getAddDrawData(@Field("money") String money,
                                           @Field("token") String token,
                                           @Field("msg") String msg,
                                           @Field("moneyType") String moneyType);


    /**
     * 提现记录
     *
     * @param limit     条数 默认100
     * @param page      页数 默认1
     * @param moneyType 充值类型 1 ETH 2 G12
     * @return
     */
    @FormUrlEncoded
    @POST("/api/draw/list")
    Observable<DrawListData> getDrawListData(@Field("limit") String limit,
                                             @Field("page") String page,
                                             @Field("moneyType") String moneyType);

    /**
     * 提现首页
     *
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/api/draw/index")
    Observable<DrawIndexData> getDrawIndexData(@Field("moneyType") String moneyType);


    /**
     * 币种转换
     *
     * @param outMoney     double 需要转换的金额
     * @param outMoneyType 转出币种 1 ETH 2 G12
     * @param inMoneyType  需要转入的币种
     * @return
     */
    @FormUrlEncoded
    @POST("/api/change/change")
    Observable<CurrencyChangeData> getCurrencyChangeData(@Field("outMoney") String outMoney,
                                                         @Field("outMoneyType") String outMoneyType,
                                                         @Field("inMoneyType") String inMoneyType);

    /**
     * 订单列表 币种转换
     *
     * @param limit 条数 100
     * @param page  页数  1
     * @return
     */
    @FormUrlEncoded
    @POST("/api/change/list")
    Observable<CurrencyChangeListData> getCurrencyChangeListData(@Field("limit") String limit,
                                                                 @Field("page") String page);

    /**
     * 币种转换首页  币种转换
     *
     * @param
     * @param
     * @return
     */
    @POST("/api/change/index")
    Observable<CurrencyChangeIndexData> getCurrencyChangeIndexData();


    /**
     * 会员量化订单列表  /api/LHOrder/userListLH
     *
     * @param page  页数  1
     * @param limit 条数 100
     * @return
     */
    @FormUrlEncoded
    @POST("/api/LHOrder/userListLH")
    Observable<UserListLHData> getUserListLHData(@Field("limit") String limit,
                                                 @Field("page") String page);

    /**
     * 点击添加量化订单显示  /api/LHOrder/showUserXingji
     *
     * @return
     */
    @POST("/api/LHOrder/showUserXingji")
    Observable<ShowUserXingjiData> getShowUserXingjiData();

    /**
     * 添加量化订单  /api/LHOrder/addLhOrder
     *
     * @param xingji    星级
     * @param ETHnum    ETH 数量
     * @param ordertype 币种类型 ETH=1
     * @return
     */
    @FormUrlEncoded
    @POST("/api/LHOrder/addLhOrder")
    Observable<AddAppendOrderData> getAddLhOrderData(@Field("xingji") String xingji,
                                                     @Field("ETHnum") String ETHnum,
                                                     @Field("ordertype") String ordertype);

    /**
     * 追加 量化订单  /api/LHOrder/appendOrder
     *
     * @param xingji 星级
     * @param ETHnum ETH 数量
     * @return
     */
    @FormUrlEncoded
    @POST("/api/LHOrder/appendOrder")
    Observable<AddAppendOrderData> getAppendOrderData(@Field("xingji") String xingji,
                                                      @Field("ETHnum") String ETHnum);

    /**
     * 追加显示 量化订单  /api/LHOrder/zhuijiashow
     *
     * @param ordersn
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/api/LHOrder/zhuijiashow")
    Observable<ZhuijiashowData> getZhuijiashowData(@Field("ordersn") String ordersn);

    /**
     * 关闭 量化订单  /api/LHOrder/closeOrder
     *
     * @param ordersn
     * @param
     * @return
     */
    @FormUrlEncoded
    @POST("/api/LHOrder/closeOrder")
    Observable<AddAppendOrderData> getCloseOrderData(@Field("ordersn") String ordersn);


    /**
     * 获取版本更新
     *
     * @param apptype
     * @return
     */
    @FormUrlEncoded
    @POST("/api/appversion/getVersion")
    Observable<UpdateData> getUpdateData(@Field("apptype") String apptype);

    /**
     * 获取我的_数据
     *
     * @return
     */
    @POST("/api/user/my")
    Observable<UserData> getMineData();


//    @GET("/api/user/my")
//    Observable<LoginData> getMineData(@Query("pwd") String pwd);

//    /**
//     * 登录
//     *
//     * @param username
//     * @param password
//     * @param sign
//     * @return
//     */
//    @FormUrlEncoded
//    @POST("api/account/Login")
//    Observable<LoginEntry> toLogin(@Field("username") String username,
//                                   @Field("password") String password,
//                                   @Field("sign") String sign);
//
//    /**
//     * 头像上传
//     *
//     * @return
//     */
//    @Multipart
//    @POST("api/News/UploadFile")
//    Observable<Message> UploadHeadPortrait(@Part MultipartBody.Part file);
//
//    @FormUrlEncoded
//    @POST("api/User/UserInfoEdit")
//    Observable<Message> UpInfo(@Field("UserId") String UserId, @Field("Nickname1") String
//            Nickname1, @Field("Duty") String Duty, @Field("UserName") String UserName,
//                               @Field("Mobile") String Mobile, @Field("Qq") String Qq, @Field
//                                       ("Weixin") String Weixin, @Field
//                                       ("Email") String Email);


}
